package com.smart.community.commons.enums;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;

/**
 * 操作结果枚举
 * 统一管理操作结果相关的常量
 * 
 * @author Wu.Liang
 * @version 1.0.0
 * @since 2025-01-30
 */
public enum OperationResultEnum {
    
    /**
     * 成功
     */
    SUCCESS(1, "成功"),
    
    /**
     * 失败
     */
    FAILED(0, "失败"),
    
    /**
     * 正常
     */
    NORMAL(1, "正常"),
    
    /**
     * 异常
     */
    ABNORMAL(0, "异常");
    
    @JsonValue
    private final Integer code;
    private final String name;
    
    OperationResultEnum(Integer code, String name) {
        this.code = code;
        this.name = name;
    }
    
    public Integer getCode() {
        return code;
    }
    
    public String getName() {
        return name;
    }
    
    /**
     * 根据代码获取枚举
     * 
     * @param code 代码
     * @return 枚举
     */
    public static OperationResultEnum getByCode(Integer code) {
        if (code == null) {
            return FAILED;
        }
        
        for (OperationResultEnum result : values()) {
            if (result.getCode().equals(code)) {
                return result;
            }
        }
        return FAILED;
    }
    
    /**
     * 根据名称获取枚举
     * 
     * @param name 名称
     * @return 枚举
     */
    public static OperationResultEnum getByName(String name) {
        if (name == null) {
            return FAILED;
        }
        
        for (OperationResultEnum result : values()) {
            if (result.getName().equals(name)) {
                return result;
            }
        }
        return FAILED;
    }
    
    /**
     * 获取操作结果名称
     * 
     * @param code 代码
     * @return 名称
     */
    public static String getNameByCode(Integer code) {
        return getByCode(code).getName();
    }
    
    /**
     * 检查是否为成功状态
     * 
     * @param code 代码
     * @return 是否成功
     */
    public static boolean isSuccess(Integer code) {
        return SUCCESS.getCode().equals(code);
    }
    
    /**
     * 检查是否为失败状态
     * 
     * @param code 代码
     * @return 是否失败
     */
    public static boolean isFailed(Integer code) {
        return FAILED.getCode().equals(code);
    }
    
    /**
     * 检查是否为正常状态
     * 
     * @param code 代码
     * @return 是否正常
     */
    public static boolean isNormal(Integer code) {
        return NORMAL.getCode().equals(code);
    }
    
    /**
     * 检查是否为异常状态
     * 
     * @param code 代码
     * @return 是否异常
     */
    public static boolean isAbnormal(Integer code) {
        return ABNORMAL.getCode().equals(code);
    }
    
    /**
     * Jackson反序列化方法
     * 严格遵循《系统状态枚举权威标准声明.md》规范
     * 
     * @param code 枚举值
     * @return 对应的枚举，如果不存在则返回FAILED
     */
    @JsonCreator
    public static OperationResultEnum fromCode(Integer code) {
        return getByCode(code);
    }
}
